package com.banyuan.servlet.author;

import com.banyuan.dao.AuthorDao;
import com.banyuan.domain.Author;
import com.banyuan.utils.CommonUtils;
import com.banyuan.utils.DBUtils;
import com.banyuan.utils.JDBCUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 处理登陆请求
 */
@WebServlet("/author/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.拿到前端传的数据
        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        String imageCode = req.getParameter("imageCode");

        // 2.判断输入的值是否为null或者去掉空格后为""
        if (CommonUtils.isEmpty(userName) || CommonUtils.isEmpty(password) ||
        CommonUtils.isEmpty(imageCode)) {
            req.setAttribute("msg","输入项为空");
            req.getRequestDispatcher("/WEB-INF/pages/author/login.jsp").forward(req,resp);
            // 跳转到登陆页面
            return; // 阻断下面代码的运行
        }

        // 3.判断验证码的正确
        HttpSession session = req.getSession();
        // 拿到存储的验证码的值
        String imagecode = (String) session.getAttribute("IMAGECODE");
        if (!imageCode.equalsIgnoreCase(imagecode)) {
            req.setAttribute("msg","验证码不正确");
            req.getRequestDispatcher("/WEB-INF/pages/author/login.jsp").forward(req,resp);
            // 跳转到登陆页面
            return; // 阻断下面代码的运行
        }


        // 4. 传入用户名和密码，去数据库里查询这个用户的所有信息
        // 如果查询出来对象，author对象里面就有值。如果查询不出信息的话，author的ID，username,password都没有值
        // 登陆成功后将这个用户的信息存储到Session里，以便后面需要用到用户验证
        // 并且跳转到index.jsp页面
        // 失败的话就跳转到登陆页面

        ResultSet rs = null;
        try {
            // 传入的密码一定是加密后的密码，不然找不到
             rs = AuthorDao.selectAuthorByUserNameAndPassword(userName, CommonUtils.calculateMD5(password));
            // 通过方法反射，将结果集里的数据赋值给一个对象
             Author author = DBUtils.resultToBeanOne(rs, Author.class);
            System.out.println(author);

            // 如果查询出来对象，author对象里面就有值。如果查询不出信息的话，author的ID，username,password都没有值
            // 所以通过id去判断
            if (author.getId() != null) {
                session.setAttribute("author",author);
                System.out.println("session---author 存储成功了");
                resp.sendRedirect(req.getContextPath());
                //跳转到首页"/"--tomcat帮我们寻找index.jsp----IndexServlet--/WEB-INF/pages/index.jsp
                // 登陆成功后跳转到index页面去
            } else {
                req.setAttribute("msg","用户名或者密码错误，请重新登录");
                req.getRequestDispatcher("/WEB-INF/pages/author/login.jsp").forward(req,resp);
                // 跳转到登陆页面
            }


        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JDBCUtils.closeBy(rs); //通过rs关流
        }


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
